package com.vhans.db.service;

import com.vhans.db.model.dto.ConditionDTO;
import com.vhans.db.model.dto.group.GroupDTO;
import com.vhans.db.model.dto.request.RequestDTO;
import com.vhans.db.model.vo.group.GroupInfoVO;
import com.vhans.db.model.vo.group.GroupVO;
import com.vhans.db.model.vo.group.SearchGroupVo;

import java.util.List;

/**
 * 群组Service接口
 *
 * @author vhans
 * @date 2023-05-21
 */
public interface ICGroupService {

    /**
     * 查询群组列表
     *
     * @param condition 条件
     * @return 群组集合
     */
    List<GroupVO> selectCGroupVOList(ConditionDTO condition);

    /**
     * 根据群中用户获取该用户所在的群组信息
     *
     * @param userId 用户id
     * @return 群组消息
     */
    List<GroupInfoVO> selectCGroupInfoByUserId(Integer userId);

    /**
     * 修改群组
     *
     * @param cGroup 群组
     * @return 影响行
     */
    int updateCGroup(GroupDTO cGroup);

    /**
     * 搜索群
     *
     * @param groupDTO 群号或者群名称
     * @return 群列表
     */
    List<SearchGroupVo> searchGroup(GroupDTO groupDTO);

    /**
     * 创建群组
     *
     * @param groupDTO 群组
     * @return 影响行
     */
    int createGroup(GroupDTO groupDTO);

    /**
     * 退出群聊
     *
     * @param groupDTO 群组
     */
    void quitGroup(GroupDTO groupDTO);

    /**
     * 删除群
     *
     * @param groupDTO 群组
     */
    void deleteGroup(GroupDTO groupDTO);

    /**
     * 获取我加入的群组列表
     *
     * @return 群组列表
     */
    List<GroupVO> selectJoinGroupList();

    /**
     * 获取我的群组列表
     *
     * @return 群组列表
     */
    List<GroupVO> selectMyGroupList();

    /**
     * 获取群组信息
     *
     * @param id 群组主键
     * @return 群组
     */
    GroupInfoVO selectGroupInfoById(Integer id);

    /**
     * 根据群号获取群组信息
     *
     * @param number 群号
     * @return 群组消息
     */
    GroupInfoVO selectCGroupInfoByGroupNumber(String number);

    /**
     * 添加群成员
     *
     * @param requestDTO 请求信息
     */
    void addNewGroupUser(RequestDTO requestDTO);

    /**
     * 获取最近的群组列表
     *
     * @param groupDTO 群组ids
     * @return 群组列表
     */
    List<GroupVO> getRecentGroup(GroupDTO groupDTO);

}
